473922633ce8ed39c143c632c6ba0dbb50886467,xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-server/src/main/java/org/xwiki/rest/internal/resources/BaseSearchResult.java,BaseSearchResult,searchDatabaseQuery,#String#String#String#boolean#boolean#number#number#Boolean#String#,627

Before Change


                    }

                    String pageUri = null;
                    try {
                        if (StringUtils.isBlank(language)) {
                            pageUri =
                                    UriBuilder
                                            .fromUri(this.uriInfo.getBaseUri())
                                            .path(PageResource.class)
                                            .buildFromEncoded(URLEncoder.encode(wikiName, "UTF-8"),
                                                    URLEncoder.encode(spaceName, "UTF-8"),
                                                    URLEncoder.encode(pageName, "UTF-8"))
                                            .toString();
                        } else {
                            searchResult.setLanguage(language);
                            pageUri =
                                    UriBuilder
                                            .fromUri(this.uriInfo.getBaseUri())
                                            .path(PageTranslationResource.class)
                                            .buildFromEncoded(URLEncoder.encode(wikiName, "UTF-8"),
                                                    URLEncoder.encode(spaceName, "UTF-8"),
                                                    URLEncoder.encode(pageName, "UTF-8"),
                                                    language).toString();
                        }
                    } catch (UnsupportedEncodingException ex) {

After Change


     * @param className Add object of type className
     * @return list of results
     */
    protected List<SearchResult> searchDatabaseQuery(String query, String queryLanguage, String wikiName,
            boolean hasProgrammingRights, boolean distinct, int number, int start, Boolean withPrettyNames,
            String className)
            throws QueryException, IllegalArgumentException, UriBuilderException, XWikiException
    {
        XWiki xwikiApi = Utils.getXWikiApi(componentManager);
        XWikiContext xwikiContext = Utils.getXWikiContext(componentManager);

        String database = Utils.getXWikiContext(componentManager).getDatabase();

        /* This try is just needed for executing the finally clause. */
        try {
            List<SearchResult> result = new ArrayList<SearchResult>();

            if (query == null || query.trim().startsWith("select")) {
                return result;
            }

            Formatter f = new Formatter();
            if (distinct) {
                f.format(
                        "select distinct doc.fullName, doc.space, doc.name, doc.language from XWikiDocument as doc %s",
                        query);
            } else {
                f.format("select doc.fullName, doc.space, doc.name, doc.language from XWikiDocument as doc %s", query);
            }
            String squery = f.toString();

            if (!hasProgrammingRights) {
                squery
                        .replace("where ",
                                "where doc.space<>'XWiki' and doc.space<>'Admin' and doc.space<>'Panels' and doc.name<>'WebPreferences' and ");
            }

            List<Object> queryResult = null;

            queryResult = queryManager.createQuery(squery, queryLanguage).setLimit(number).setOffset(start).execute();

            /* Build the result. */
            for (Object object : queryResult) {
                Object[] fields = (Object[]) object;

                String spaceName = (String) fields[1];
                String pageName = (String) fields[2];
                String language = (String) fields[3];

                String pageId = Utils.getPageId(wikiName, spaceName, pageName);
                String pageFullName = Utils.getPageFullName(wikiName, spaceName, pageName);

                /* Check if the user has the right to see the found document */
                if (xwikiApi.hasAccessLevel("view", pageId)) {
                    Document doc = xwikiApi.getDocument(pageFullName);
                    String title = doc.getDisplayTitle();

                    SearchResult searchResult = objectFactory.createSearchResult();
                    searchResult.setType("page");
                    searchResult.setId(pageId);
                    searchResult.setPageFullName(pageFullName);
                    searchResult.setTitle(title);
                    searchResult.setWiki(wikiName);
                    searchResult.setSpace(spaceName);
                    searchResult.setPageName(pageName);
                    searchResult.setVersion(doc.getVersion());
                    searchResult.setAuthor(doc.getAuthor());
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(doc.getDate());
                    searchResult.setModified(calendar);

                    if (withPrettyNames) {
                        searchResult.setAuthorName(Utils.getAuthorName(doc.getAuthor(), componentManager));
                    }

                    /*
                     * Avoid to return object information if the user is not authenticated. This will prevent crawlers
                     * to retrieve information such as email addresses and passwords from user's profiles.
                     */
                    if (className != null && !className.equals("") && xwikiContext.getUserReference() != null) {
                        BaseObject baseObject = Utils.getBaseObject(doc, className, 0, componentManager);
                        if (baseObject != null) {
                            searchResult.setObject(DomainObjectFactory.createObject(objectFactory,
                                    uriInfo.getBaseUri(), xwikiContext, doc, baseObject, false, xwikiApi, false));
                        }
                    }

                    String pageUri = null;
                    if (StringUtils.isBlank(language)) {
                        pageUri =
                            Utils.createURI(this.uriInfo.getBaseUri(), PageResource.class, wikiName, spaceName,
                                pageName).toString();
                    } else {
                        searchResult.setLanguage(language);
                        pageUri =
                            Utils.createURI(this.uriInfo.getBaseUri(), PageTranslationResource.class, wikiName,
                                spaceName, pageName, language).toString();
                    }